package cn.biplam.common.bean.md;

import cn.biplam.common.bean.Bean;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.UserInfo;

/**
 * 模型对象列操作类,操作模型表下的所有列
 * @author WangSong 2009-10-28下午12:50:55
 * @version 1.0
 */
public abstract class MdTableColAll extends Bean{	
	
	/**
	 * @return 是否还有对象
	 */
	public abstract boolean haveNext();

	/**
	 * 移动指针到下一个
	 */
	public abstract void next();

	/**
	 * 取模型对象列的列Id
	 * @return 模型对象列的列Id
	 * @throws ErrorMessage
	 */
	public abstract String getColID() throws ErrorMessage;

	/**
	 * 取列所属模型对象的表Id
	 * @return 列所属模型对象的表Id
	 * @throws ErrorMessage
	 */
	public abstract String getTableID() throws ErrorMessage;

	/**
	 * 取字段名称
	 * @return 字段名称
	 * @throws ErrorMessage
	 */
	public abstract String getName() throws ErrorMessage;

	/**
	 * 取字段中文名称
	 * @return 字段中文名称
	 * @throws ErrorMessage
	 */
	public abstract String getCnName() throws ErrorMessage;

	/**
	 * 取字段说明
	 * @return 字段说明
	 * @throws ErrorMessage
	 */
	public abstract String getDesc() throws ErrorMessage;
	
	/**
	 * 取列是否是外键
	 * @return 列是否是外键
	 * @throws ErrorMessage
	 */
	public abstract boolean getbIsFk() throws ErrorMessage;
	
	/**
	 * 取列是否是主键
	 * @return 列是否是主键
	 * @throws ErrorMessage
	 */
	public abstract boolean getbIsPk() throws ErrorMessage;
	
	/**
	 * 取列的数据类型
	 * @return 列的数据类型
	 * @throws ErrorMessage
	 */
	public abstract String getDataType() throws ErrorMessage;
	
	/**
	 * 取列的数据Precision
	 * @return 数据Precision
	 * @throws ErrorMessage
	 */
	public abstract String getDataPrecision() throws ErrorMessage;
	
	/**
	 * 取列的数据精度
	 * @return 数据精度
	 * @throws ErrorMessage
	 */
	public abstract String getDataScale() throws ErrorMessage;
	
	/**
	 *  取列数据长度
	 * @return 列数据长度
	 * @throws ErrorMessage
	 */
	public abstract String getDataLength() throws ErrorMessage;
	
	/**
	 *  取列数据类型完整描述
	 * @return 列数据类型描述
	 * @throws ErrorMessage
	 */
	public abstract String getDataTypeDesc() throws ErrorMessage;
	
	/**
	 * 插入记录集
	 * @param filter 过滤器
	 * @throws ErrorMessage
	 */
	public abstract void delete() throws ErrorMessage;
	
	/**
	 * 根据模型表id和模型类型,新建实例
	 * @param mUser 用户信息
	 * @param modelType 模型类型
	 * @param oid  表Id
	 * @return 实例（包含当前表下的所有列）
	 * @throws ErrorMessage
	 */
	public static MdTableColAll getNewInstance(UserInfo mUser,String modelType,String oid) throws ErrorMessage{
		return (MdTableColAll)get(MdTableColAll.class.getSimpleName(), mUser, modelType, oid);
	}
	
	/**
	 * 根据模型表id和模型类型,新建实例
	 * @param mUser 用户信息
	 * @param modelType 模型类型
	 * @param oid  表Id
	 * @return 实例（包含当前表下的所有列）
	 * @throws ErrorMessage
	 */
	public static MdTableColAll getNewInstance(String userId,String modelType,String oid) throws ErrorMessage{
		return (MdTableColAll)get(MdTableColAll.class.getSimpleName(), userId, modelType, oid);
	}
	
	/**表列ID字段名 */
	public abstract String getOCID();
	
	/** 表id字段名 */
	public abstract String getOID();
	
	/** 表列名称字段名 */
	public abstract String getTABLE_COL_NAME();
	
	/** 表列中文名字段名 */
	public abstract String getTABLE_COL_CNAME();
	
	/** 表列数据类型 字段名 */
	public abstract String getDATA_TYPE();
	
	/** 表列说明字段名 */
	public abstract String getTABLE_COL_DESC();
	
	/** 表列是否是主键 字段名 */
	public abstract String getIS_PK();
	
	/** 表列是否是外键 字段名 */
	public abstract String getIS_FK();
	
	/** 表列数据长度 */
	public abstract String getDATA_PRECESION();
	
	/** 表列数据精度 */
	public abstract String getDATA_SCALE();
	
	/** 表列数据长度 */
	public abstract String getDATA_LENGTH();

}